package com.hbnu.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hbnu.system.core.base.CommonPage;
import com.hbnu.system.model.dto.CheckBackDTO;
import com.hbnu.system.model.dto.PatentDTO;
import com.hbnu.system.model.entity.Patent;
import com.hbnu.system.model.query.PatentPageQuery;
import com.hbnu.system.model.vo.PatentVO;
import org.springframework.web.bind.annotation.RequestBody;

import java.io.IOException;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ${author}
 * @since 2023-05-16
 */
public interface IPatentService extends IService<Patent> {

    /**
     * 新增专利 正式
     *
     * @param patentdto
     * @return 是否成功
     */
    boolean addPatent(@RequestBody PatentDTO patentdto);

    /**
     * 删除专利
     *
     */
    boolean deletePatent(String patentID) throws IOException;

    /**
     * 根据专利DTO主键查询专利
     *
     * @param patentID
     * @return Paper
     */
    PatentDTO getPatentDTOById(String patentID);

    /**
     * 根据专利主键查询专利
     *
     * @param patentID
     * @return Paper
     */
    Patent getPatentById(String patentID);


    /**
     * 修改专利
     *
     * @param patent
     * @return 是否成功
     */
    boolean updatePatent(Patent patent);

    /**
     * 专利名称查重
     * @param patent_name
     * @return 是否重复
     */
    boolean checkPatentName(String patent_name);

    /**
     * 院级审核通过
     */
    Boolean collegeCheckPass(String token,String PaID);

    /**
     * 院级审核打回
     */
    Boolean collegeCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 校级审核通过
     */
    Boolean schoolCheckPass(String token,String PaID);

    /**
     * 校级审核打回
     */
    Boolean schoolCheckBack(String token,CheckBackDTO checkBackDTO);

    /**
     * 专利再度提交
     */
    Boolean ReCommitPatent(String patentID);
    
    /**
     * 专利撤回
     * 只有在院级审核状态才能撤回，撤回后状态变为草稿
     */
    Boolean withdrawPatent(String patentID);


    /**
     * 普通用户分页查看与自己相关的专利
     */
    CommonPage<PatentVO> userGetRelatePatent(PatentPageQuery patentPageQuery);

    /**
     * 导出用户关联的专利
     *
     * @param patentPageQuery 查询参数
     * @return 导出数据
     */
    CommonPage<Patent> export(PatentPageQuery patentPageQuery);



}
